home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / ai.prl / opnprlg1.hqx / Open Prolog / Documents / Revision History < prev    next >
Text File  |  1993-04-15  |  19KB  |  311 lines

  1. ╫ Open Prolog Revision History
  2. - 1.0d42
  3.  
  4. ÑÑ New Features
  5.  
  6. Ñ Open Prolog no longer relies on the file Syserrs.Err for error information - instead, this data has been incorporated into Open Prolog itself. Remove it from your System Folder if no other applications use it.
  7.  
  8. ÑÑ Bug Fixes
  9.  
  10. Ñ    Fixed a bug which initialised the predicates in a PRLX resource in the wrong order. This bug only has an effect if the predicates share common data structures - what is supposed to be the first predicate to be initialised (and hence the one to allocate the shared storage) was actually being initialised last. Oops. Sorry... Now, the predicates are initialised in ascending numerical order, as advertised.
  11.  
  12. - 1.0d41
  13.  
  14. ÑÑ New Features
  15.  
  16. Ñ    Implemented abs/1, meaning 'absolute value' as an evaluable function.
  17.  
  18. Ñ    A new built-in predicate 'get$prolog$error$message'/2 is implemented. Give it an Open Prolog error code and it returns a message. OP error codes start at -32767 and work upwards towards 0.
  19.  
  20. Ñ The built-in predicate 'get$error$message'/2 has been renamed to 'get$host$error$message'. First argument is a Mac error code, second will be the error message atom.
  21.  
  22. ÑÑ Bug Fixes
  23.  
  24. Ñ    Fixed a bug in the External Predicate interface which prevented writestr, writelnstr and errorstr messages from being output.
  25.  
  26. - 1.0d40 & 1.0d39 - bug fix releases only
  27.  
  28. ÑÑ Bug Fixes
  29.  
  30. Ñ    Two stupid bugs introduced in 38 have been removed. One affected retract/1, the other caused problems when tracing an unknown predicate.
  31.  
  32. - 1.0d38
  33. ÑÑ New Features & Improvements
  34.  
  35. Ñ    Open Prolog is now 32-bit clean.
  36.  
  37. ÑÑ Bug fixes
  38.  
  39. Ñ Restrictions on maximum character size of a clause, and on the 'depth' or complexity of a term being read have been relaxed.
  40.  
  41. - 1.0d37
  42. ÑÑ New Features & Improvements
  43.  
  44. Ñ \(X) added to arithmetic functions, meaning bitwise not.
  45.  
  46. Ñ bagof/3 and setof/3 have been implemented according to the ISO Prolog Draft (except for type and mode checks).
  47.  
  48. Ñ catch-and-throw exception handling has been implemented.
  49. The ISO Prolog Draft of March 27 1992 describes a method - catch-and-throw - of handling exceptional conditions that originate either with a user's program or with the system. Open Prolog now implements the catch/3 and throw/1 predicates as specified in the draft. User programs can use catch and throw for their own exception handling.
  50. The ISO draft has two alternative schemes for handling exceptions due to errors in built-in predicates. Since the draft was written, another scheme has come to prominence, and a version of that is implemented. Please refer to the document entitled 'Exception Handling' for more information.
  51.  
  52. Ñ The ISO Prolog built-in predicates once/1 and fail_if/1 have been implemented. The predicate once(X) is as if defined by once(X) :- call(X),!., and fail_if(X) is exactly the same as not(X).
  53.  
  54. Ñ Finally, after many requests - the built-in \= has been built in (!).
  55.  
  56. Ñ not/1 has been speeded up - now it's as fast as \+.
  57.  
  58. Ñ printing is a little nicer - 36-point borders all round, printer permitting.
  59.  
  60. Ñ    External Predicate interface revised and improved (see separate document). If you have written any external predicates of your own, you'll need to recompile them with the new interface and library files.
  61.  
  62. ÑÑ Bug fixes
  63.  
  64. Ñ errors resulting from the stack running out of space during a deep unification, usually as a result of an occur check violation, have been trapped and cause an error to be thrown.
  65.  
  66. Ñ    a deep-seated bug in the garbage collector fixed. It seems this bug only shows up in Mac Pluses running System 6.
  67.  
  68. Ñ    lots of clicking & typing while Open Prolog was starting up would upset it - fixed.
  69.  
  70. Ñ if you tried to print while the About Open Prolog╔ window was open anywhere (even when hidden), the system hung up.
  71.  
  72. Ñ yet another low-memory bug fixed.
  73.  
  74. Ñ command-. for aborting execution has been improved. Sometimes it didn't work, say when a long term was being written to the screen. Now, it always stops execution, but it doesn't say what predicate was executing at the time. Instead a message of the form error(user_interrupt,_) is thrown. At present, the second argument is an empty list. It will change in future, and external predicates will put information here if they are likewise stopped.
  75.  
  76. Ñ an operator taking a conjunction of arguments should be written with a space between it and the bracket starting the conjunction. This was not being done, and has now been fixed. Example: not((a,b,c)) should be written: not (a,b,c), rather than not(a,b,c) which looks like a functor called not with arity 3.
  77.  
  78. Ñ various little bugs in the debugger cleaned up.
  79.  
  80. Ñ actions called from Open Prolog Startup or Open Prolog Options could not be interrupted with command-(.). Fixed.
  81.  
  82. Ñ a bug which caused Open Prolog to put one character at the end of an empty file when the file was simply opened and closed has been fixed. What was happening was that Open Prolog was trying to discover its access priviliges to the file by writing the first byte back out. If the file was empty, the byte was bogus and wasn't being removed.
  83.  
  84. Ñ a bug in the code for ! caused two kinds of problems occasionally when \+ or -> was used. A symptom of the first problem was a 'tr error' message or a straightforward crash. A symptom of the second error was that a 'tr error' or crash would occur after aborting from a program which used \+ or ->. Fixed.
  85.  
  86. Ñ printing sometimes hung up due to a faulty memory requester. Fixed.
  87.  
  88. Ñ a formatting infelicity when listing a disjunction of goals has been repaired.
  89.  
  90. Ñ    a bug in the DCG parser has been fixed which caused a fatal diagnostic error
  91. whenever a Definite Clause containing a disjunction was to be translated.
  92.  
  93. Ñ a bug in read/1, get/1 and get0/1 has been fixed. The bug occured
  94. when the term or character read from the input stream couldn't
  95. unify with the argument supplied.
  96. When unification fails like that, the predicate should have failed, but 
  97. because of the bug, the call succeeded.
  98. The bug has been fixed.
  99.  
  100. Ñ spy, nospy and spying were invisible! - fixed
  101.  
  102. Ñ listing always returned a bogus error - fixed
  103.  
  104. Ñ a parsing bug occured where a postfix operator of more that 1000 was incorrectly used. Instead of reporting the error, the parser crashed. - fixed.
  105.  
  106. - 1.0d36
  107. ÑÑ New features:
  108. (Summary: ; -> \+ and ┬ implemented fully; print/1 improved; trace/1 rewritten with spy points)
  109.  
  110. Ñ    disjunction (';'/2), if-then ('->'/2), if-then-else, and \+ now work properly with respect to cuts, and conform to the ISO Prolog draft. They are also considerably faster than before.
  111. Ñ The symbol ┬ (i.e. option-l) is acceptable instead of \+ . This use of ┬ is not standard,
  112. so programs using ┬ won't work on other Prologs without modification.
  113.  
  114. Ñ print/1 has been revised to call portray/1 recursively on arguments. Before, it used only called portray/1 at the top level.
  115. The trace handler and the top-level loop now uses print/1 to output arguments, so you can modify their behaviour by writing specialised portray/1 handlers.
  116.  
  117. Ñ trace/1 has been substantially rewritten to handle control calls properly. It's also prettier.
  118. The control calls are ;/2 \+/1 ,/2 -> (i.e. disjunction, negation, conjunction, if-then and if-then-else).
  119.  
  120. The revised trace handler also supports a limited form of spying.
  121.  
  122. The trace handler is a specialised interpreter, written in Prolog, to interpret Prolog programs. It has been built 'for comfort and not for speed', and it is about twenty times slower than normal. In addition, tail recursion has to be switched off for debugging, so stacks can easily overflow during debugging.
  123.  
  124. Five new built-ins and one new hook are associated with trace/1.
  125. -> spy(Predicate) This sets the trace handler to stop when the predicate is encountered. If your are tracing through code, you can switch off debug listing (using 'leap'), until a spy point is encountered. A spy point is almost identical to a breakpoint in a conventional language debugger.
  126. -> nospy(Predicate) This removes the 'spy point' from this predicate.
  127. -> spying. This lists the predicates that are currently marked with spy points.
  128. -> useDebugWindow(OldWindow,NewWindow) NewWindow should be set to the name of a window in which the tracing information should be displayed, or enter 'no' if you want to use the Worksheet.
  129. By default, a window called 'Open Prolog Debug Window' is used.
  130. -> leash(Port,OldState,NewState). The ports are call, exit, redo and fail. If leashing is on then the trace will stop to allow you to enter a command. If leashing is off, the trace information will be written and tracing will continue without a break.
  131. By default, leashing is on at all four ports.
  132. -> debugStartAction is an optional predicate which will be executed at the start of a trace, after the trace window (if any) has been opened. You could use if, for example, to write out the date and time when debugging started, by defining the following clause in your startup or options file:
  133.  
  134. debugStartAction :-
  135.         'system$seconds'(S),
  136.         'system$date'(S,D),
  137.         'system$time'(S,T),
  138.         nl,
  139.         write(D),
  140.         write(', '),
  141.         write(T),
  142.         nl.
  143.  
  144. Ñ a new built-in 'get$error$string'(Number,Atom) has been added. If Number is a Macintosh-generated error number, then Atom will be unified with the error message.
  145.  
  146.  
  147.  
  148. ÑÑ Bug Fixes:
  149.  
  150. Ñ if the worksheet is already open, it can't get the message out -- fixed.
  151.  
  152. Ñ unnecessary debug message if stackAdjust is called by accessCode -- removed
  153.  
  154. Ñ current_op/3 didn't work if either of first two arguments were instantiated -- fixed
  155.  
  156. Ñ fixed bugs in clause/2 so that it obeys the 'logical' semantics of assert and retract,
  157. and so that gc will be done properly taking account of alternatives still
  158. under consideration in clause/2.
  159.  
  160. Ñ local stack usage reduced a little by cleaning up more thoroughly after built-ins.
  161.  
  162. Ñ fixed a bug in clause/2 which occasionally caused in a crash after a gc, or else a frame number to be returned as a goal (thereby crashing the trace/1 debugger).
  163.  
  164. Ñ fixed a bug in compare/3 so that it unifies the first argument with the correct atoms for <, > or =. Previously it used functors </2, >/2 and =/2. They looked the same but weren't.
  165.  
  166. Ñ fixed a bug in trace/1 which caused it to ignore cuts being traced (trace has been revised - see above).
  167.  
  168. Ñ fixed a bug in retract/1 which caused, say, retract((t:-X)) not to work with a clause like t:-a,b,c. This was because all variables in the tail were converted into call(_) before looking for a clause to retract, giving retract((t:-call(Y)) for the example above, which is clearly wrong. retract/1 now works properly on backtracking. It used to skip every second elegible clause, or something like that. In fact, retract/1 was very weird.
  169.  
  170. Ñ fixed a bug in 'system$menu'/10 so that special characters (e.g. /) are not interpreted in a menu name.
  171.  
  172. Ñ abolish/2 now removes normal and external predicates only. Hitherto it could also remove bips!
  173.  
  174. Ñ listing/1 generates an error message when presented with an unusable argument.
  175.  
  176. - 1.0d35
  177. Ñ External Predicates: New eventsVersion number due to internal changes incompatible with previous versions. If you have built your own external predicates, you'll need to recompile them with the new 'prlx definitions' file. If you forget to, you'll get messages saying some external predicates have been disabled.
  178. Ñ Alerts were disabled before the worksheet came up, causing the system to hang if it tried to display an error message on startup.
  179. Ñ Accepts as input numeric strings of the form N'MMMMM where N is a base, from 2 to 9, and M is the number to that base. Not much error checking is done! Doesn't accept 0x... for hex, nor 0'c for char code yet.
  180. Ñ Consult & reconsult now have hooks to term_expansion/2. Every time a term (e.g. a clause) is read during consult or reconsult, it is first passed to term_expansion(Term,ExpandedTerm) for possible expansion. You can add user defined expansion code here by writing your own term_expansion/2 predicate. For speed, it is important that the first argument is not just a variable, but is the skeleton of the kind of term that can be handled - this way, time won't be wasted calling your term_expansion code on every clause. The expanded output can include DCG forms, as it is passed through the DCG expander before finally being asserted.
  181. Ñ Major bug fix in assert assembler. (How can such a bad bug stay in a system so long?) This bug may have been responsible for crashes during extended use of the debugger, and for crashes when the clause/2 bip is used as a clause generator.
  182. Ñ 'system$list$clause'/2 will take the arguments as produced by clause/2 and pretty-list them (well kinda-pretty anyway).
  183.  
  184. - 1.0d34
  185. Ñ Fixed a stupid omission which made1.0d33 crash on opening in a System 6 System
  186. Ñ Command-(.) is more reliable; works even when bips are being executed exclusively.
  187. Ñ 'beep' and 'read' do notifications from background.
  188. Ñ Alert and dialog calls do notifications from background.
  189. Ñ New external predicates:
  190.  'system$start$notification'(MessageAtom,SoundNameAtom).
  191.  e.g.:
  192.  'system$start$notification'('This is a Notification Message','uh-oh').
  193.  
  194.  % if the message is '', no alert is shown. If the sound is 'beep' the
  195.  %standard sound is used; otherwise the named sound will be used if found.
  196.  
  197.  'system$stop$notification'.
  198.  
  199.  'system$in$foreground'
  200.  %true when Open Prolog is running in the foreground.
  201. Ñ The 'Consult Front Window' command key has been changed to B to avoid clash with Copy
  202. Ñ A Balloon for the Open Prolog Icon on the Finder Desktop.
  203. Ñ 'system$menu' now recognises the menu 'BalloonHelp' (case of letters is important here) as specially referring to System 7's Balloon Help Icon on the right of the menu bar. So you can add and remove menu items from here. In System 6, anything with a menu name of BalloonHelp will be ignored.
  204. Ñ When you open an file from the Finder, Open Prolog now sets the standard file dialogs to point to the folder the file resides in.
  205. Ñ New external predicate 'system$standard$file$directory'(OldVol,OldDirID,NewVol,NewDirID).
  206. This returns the current volume number and directory IDs of the folder the standard file dialogs are pointing to, and sets them to NewVol and NewDirID. To check current values, use:
  207. 'system$standard$file$directory'(V,D,V,D).
  208. Ñ Built-in predicates:
  209. 'system$get$directory'(CurrentDirectoryNumber), %note - not DirID
  210. 'system$set$directory'(NewDirectoryNumber),
  211. 'system$get$directory'(Kind,DirectoryNumber). {Kind = application or current}
  212. Ñ Open Prolog is a bit smarter now when looking for temporary space during garbage collection. In System 7, it will use temporary memory. (Running out of space during garbage collection causes the 'out of recur space' diagnostic to appear.)
  213. Ñ    Some bugs handling large numbers of names (atoms/functors) have been removed. Better allocation of name space and more reliable warnings of unhappiness╔ Works fairly well up to 8MB of allocation.
  214. Ñ    'system$menus' really works as described in Open Prolog Extras now(!)
  215.  
  216. - 1.0d33
  217. 1. Some bugs removed, particularly a pernicious bug whereby OP very occasionally forgot to uninstantiate a variable on backtracking.
  218. 2. trace/1 had been renamed ptrace/1 in 1.0d31 & 1.0d32. Now it's back╔
  219. 3. Opening and Printing from the desktop now implemented in System 7 only.
  220. 4. 'system$window$open$new$window' introduced & 'system$window$open$file$window' modified to work only with existing files.
  221. 5. Holding down the shift key reverses the find/search direction.
  222. 6. Undo works for error messages inserted in files by 'Show Syntax Error'.
  223. 7. Arity of 'system$menu' has changed to allow the generated menu number to be returned.
  224. 8. 'system$machine$kind'/1 (System 7 Only).
  225. 9. Some problems with locked or read-only volumes and files cured.
  226.  
  227. - 1.0d31 & 1.0d32
  228. 1. Many bugs fixed, principally sort/2 now merges identical terms, not unifiable ones as before (sometimes).
  229. 2. About 10% faster.
  230. 3. System 7 'Required' AppleEvents now supported (barely).
  231. 4. External Predicates can now see incoming events, including High Level events. Interesting possibilities for scripting, etc.
  232.  
  233. - 1.0d30
  234. 1. Print Selection works
  235. 2. Menus have been re-arranged and some tantalising new items introduced╔
  236. 3. Printing from the desktop isn't done at present. A bug giving the 'can't do'
  237. message has been removed.
  238. 4. A bug in 'system$clause'/3, causing it to crash when gc was done in a backtrack
  239. has been fixed.
  240.  
  241. - 1.0d29
  242. 1. Arrow keys implemented: Command-Arrows and Command-Option-Arrows.
  243. 2. Option-Return does the opposite of whatever is specified by the the auto-indent
  244. menu selection.
  245. 3. 'system$answer$mode'(CurrentMode,NewMode) added - allowable values 'terse' and
  246. 'verbose'. 'verbose' is default.
  247.  
  248. - 1.0d28
  249. 1. Fix a bug that occurs after the 'out of recur space' diagnostic appears.
  250. 2. Add the choice between 'verbose' and 'terse' answering modes.
  251. 3. Added progress bar - look for 'system$show$progress', 'system$hide$progress',
  252. 'system$set$progress'(Numerator,Denominator) - this puts gray in the appropriate
  253. fraction of the progress bar.
  254. 4. 'system$get$file$size'(FileName,ByteSize,Error). - An Error of 0 means OK.
  255.  'system$get$file$size'(joe,ByteSize,Error).
  256.  
  257. - 1.0d27
  258. Behaviour in tight memory situations improved a little. Discarded use
  259. of System 6 Multifinder Memory, instead updated to use temporary memory
  260. gracefully under System 7.
  261. 'system$random' now works with a negative range.
  262.  
  263. - 1.0d26
  264. 1.    Undo finally implemented!
  265. 2.  Minor cosmetic changes to minimise junk on worksheet (further changes in d28).
  266. 3.  You can add menus to Open Prolog. See 'Open Prolog Extras' for details.
  267. 4.  Bug fix - a bug which crashed Open Prolog when a systen predicate was
  268.     stopped by command-. has been removed.
  269.  
  270. - 1.0d25 Bug Fixes - name/2 with numbers, serious memory Management
  271. garbage collection errors fixed. 'system$alert'/1 replaced by 'system$alert'/4
  272. 'system$confirm'/4 introduced also. Default folder changed on startup - see text.
  273.  
  274. - 1.0d24 Bug Fixes (multiple operator definitions, command-.), introduction of a
  275. status bar, use of 'Syserrs.err' for error messages╔
  276.  
  277. - 1.0d23, 1.0d22 & 1.0d21 Bug Fixes
  278.  
  279. -1.0d20
  280. 1. Add garbage collection to the code space - findall without tears!
  281. 2. Fix some odd behaviour of the debugger. It seemed to wander off
  282. sometimes╔
  283.  
  284. -1.0d18
  285. 1. Animated Cursor to stop it resting or sleeping on a long calculation in a
  286. Portable.
  287.  
  288. -1.0d17
  289. 1. Cosmetic improvements, particularly multi-screen handling.
  290. 2. New window-handling predicates.
  291. 3. External Predicate Interface Inprovement
  292.  
  293. - 1.0d16
  294. 1.    A crash-without-warning bug has been cured.
  295. 2.    A bug in call(X) which declated a call like call((read(X),X)) illegal because
  296. the second call was uninstantiated has been cured.
  297. 3.    The DCG compiler has been changed a little.
  298. 4.    Various cosmetic improvements.
  299. 5.    A number of extra predicates to handle window I/O have been added.
  300.  
  301. - 1.0d15
  302. 1. A restriction which required all <ENTER>ed text (including commands)
  303. to be on the Worksheet has been removed.
  304. 2. Sometimes the way in which part of a line was picked for selection
  305. was a little unpredictable. This has been cured.
  306. 3. A -192 warning caused by a harmless fault in the System
  307. when DA Menuz and Suitcase were present has been removed.
  308.  
  309. - 1.0d14
  310. Initial Release
  311.